home *** CD-ROM | disk | FTP | other *** search
- #include "Printer.h"
- #include "PrintDialog.h"
- #include "DocView.h"
- #include "Document.h"
- #include "GuiTargets.h"
- #include "UserEvents.h"
- #include "GuiGadget.h"
- #include "strstream.h"
- #include <stdlib.h>
- #include "guiTask.h"
- #include "NumberField.h"
- #include "fstream.h"
- #include "ChoicesFilePath.h"
- #include "uCompare.h"
- class PrintSetup
- {
- public:
- PrintSetup(GuiWindow& printDialog);
- void getFlags(int &flags);
-
- private:
- GuiWindow mainWin;
- GuiWindow& printDialog;
- GuiOptionButton reversesSheets;
- GuiOptionButton turnsPaperOver;
- GuiOptionButton isCollate;
- GuiOptionButton isLandscape;
- int flags;
-
- GUI_DECLARE_EVENT_TARGETS(PrintSetup);
-
- GuiToolboxTarget showTarget;
- Claim show(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiToolboxTarget setTarget;
- Claim set(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiToolboxTarget saveTarget;
- Claim save(GuiToolboxEvent&,const GuiIdBlock&);
- };
-
- //*************************************************************************
-
- PrintSetup::PrintSetup(GuiWindow& prDialog)
- : mainWin("printSetup"),
- printDialog(prDialog),
- reversesSheets(mainWin,1),
- turnsPaperOver(mainWin,4),
- isCollate(mainWin,5),
- isLandscape(mainWin,0x1e),
- flags(PrintData::IS_COLLATE),
- showTarget(&printDialog,User_PrintShowSetup,this,PrintSetup::show),
- setTarget(&mainWin,User_PrintSetSetup,this,PrintSetup::set),
- saveTarget(&mainWin,User_PrintSaveSetup,this,PrintSetup::save)
- {
- string file=getChoicesFilePath("PrintSetup");
- char buf[128];
- ifstream in(file.c_str());
- if (!in) return;
-
- while (in.getline(buf,sizeof(buf)))
- {
- if (uStartsWith(buf,"Reverse:")) { if (buf[8]=='1') flags |= PrintData::IS_REVERSES_SHEETS; }
- else if (uStartsWith(buf,"TurnsOver:")) { if (buf[10]=='1') flags |= PrintData::IS_TURNS_PAPER_OVER; }
- else if (uStartsWith(buf,"Collate:")) { if (buf[8]=='0') flags &= ~PrintData::IS_COLLATE; }
- else if (uStartsWith(buf,"Landscape:")) { if (buf[10]=='1') flags |= PrintData::IS_LANDSCAPE;}
- }
- }
-
- //*************************************************************************
-
- void PrintSetup::getFlags(int& f)
- {
- f &=~ (PrintData::IS_REVERSES_SHEETS |
- PrintData::IS_TURNS_PAPER_OVER |
- PrintData::IS_COLLATE |
- PrintData::IS_LANDSCAPE
- );
- f |=flags;
- }
-
- //*************************************************************************
-
-
- Claim PrintSetup::show(GuiToolboxEvent&,const GuiIdBlock&)
- {
- mainWin.showAsMenuCentred(printDialog,&printDialog);
- reversesSheets.set(flags & PrintData::IS_REVERSES_SHEETS);
- turnsPaperOver.set(flags & PrintData::IS_TURNS_PAPER_OVER);
- isCollate.set(flags & PrintData::IS_COLLATE);
- isLandscape.set(flags & PrintData::IS_LANDSCAPE);
- return CLAIM;
- }
-
- //*************************************************************************
-
-
- Claim PrintSetup::set(GuiToolboxEvent& ev,const GuiIdBlock&)
- {
- flags = (reversesSheets.isOn()?PrintData::IS_REVERSES_SHEETS:0);
- flags |= (turnsPaperOver.isOn()?PrintData::IS_TURNS_PAPER_OVER:0);
- flags |= (isCollate.isOn()?PrintData::IS_COLLATE:0);
- flags |= (isLandscape.isOn()?PrintData::IS_LANDSCAPE:0);
- ev.eventCode=User_PrintDialogOpen;
- GuiTask::raiseEvent(mainWin,ev);
- return CLAIM;
- }
-
- //*************************************************************************
-
-
- Claim PrintSetup::save(GuiToolboxEvent& ev,const GuiIdBlock& idBlock)
- {
- set(ev,idBlock);
-
- string file=getChoicesFilePath("PrintSetup");
- ofstream out(file.c_str());
- if (!out) return CLAIM;
-
- out << "Reverse:" << (flags & PrintData::IS_REVERSES_SHEETS ? '1': '0') << endl
- << "TurnsOver:" << (flags & PrintData::IS_TURNS_PAPER_OVER ? '1': '0') << endl
- << "Collate:" << (flags & PrintData::IS_COLLATE ? '1': '0') << endl
- << "Landscape:" << (flags & PrintData::IS_LANDSCAPE ? '1': '0') << endl;
-
- return CLAIM;
- }
- //*************************************************************************
- //*************************************************************************
- //*************************************************************************
-
- class PrintDialog
- {
- public:
- friend bool PrintDialog_open(DocView& view, GuiWindow& ancestor, int page);
- bool open(DocView& view,GuiWindow& ancestor,int page);
-
- private:
- GuiWindow mainWin;
- PrintSetup printSetup;
- GuiRadioButton isAll;
- GuiRadioButton isFrom;
- NumberField from;
- NumberField to;
- GuiNumberRange copies;
- GuiOptionButton isDoubleSided;
- GuiOptionButton isSide2;
- GuiOptionButton isStartEnd;
- GuiOptionButton isPamphlet;
- GuiOptionButton isSectionSize;
- GuiLabel startLabel;
- NumberField start;
- GuiLabel endLabel;
- NumberField end;
- GuiLabel pageLabel;
- GuiLabel sectionSizeLabel;
- NumberField sectionSize;
- GuiLabel sheetsLabel;
- PrintData data;
-
-
- PrintDialog();
- ~PrintDialog();
-
- void storeValues();
- void showValues();
-
- void fade();
-
- GUI_DECLARE_EVENT_TARGETS(PrintDialog);
-
- GuiToolboxTarget cancelTarget;
- Claim cancel(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiToolboxTarget setTarget;
- Claim set(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiToolboxTarget printTarget;
- Claim print(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiToolboxTarget fadeDialogTarget;
- Claim fadeDialog(GuiToolboxEvent&,const GuiIdBlock&);
-
- GuiNullTarget nullTarget;
- void printWait();
- };
-
- //*************************************************************************
-
- PrintDialog::PrintDialog()
- : mainWin("print"),
- printSetup(mainWin),
- isAll(mainWin,0),
- isFrom(mainWin,1),
- from(mainWin,0xa),
- to(mainWin,0x4),
- copies(mainWin,0x19),
- isDoubleSided(mainWin,0x80),
- isSide2(mainWin,0x90),
- isStartEnd(mainWin,0x93),
- isPamphlet(mainWin,0x86),
- isSectionSize(mainWin,0x94),
- startLabel(mainWin,0x88),
- start(mainWin,0x89),
- endLabel(mainWin,0x8a),
- end(mainWin,0x8b),
- pageLabel(mainWin,0x92),
- sectionSizeLabel(mainWin,0x8d),
- sectionSize(mainWin,0x8e),
- sheetsLabel(mainWin,0x8f),
- cancelTarget(&mainWin,User_PrintDialogCancel,this,PrintDialog::cancel),
- setTarget(&mainWin,User_PrintDialogSet,this,PrintDialog::set),
- printTarget(&mainWin,User_PrintDialogPrint,this,PrintDialog::print),
- fadeDialogTarget(&mainWin,User_PrintDialogFade,this,PrintDialog::fadeDialog)
- {
- storeValues();
- }
-
- //*************************************************************************
-
- PrintDialog::~PrintDialog() {}
-
- //*************************************************************************
-
- bool PrintDialog::open(DocView& view, GuiWindow& ancestor,int page)
- {
- mainWin.showAsMenuCentred(ancestor,&ancestor);
-
- char* name=0;
- if (!_swix(PDriver_Info,_OUT(4),&name) && name) mainWin.setTitle(name);
-
- showValues();
-
-
- // isAll.select();
- data.from=page;
- from.setNumber(page);
- data.to=page;
- to.setNumber(page);
- data.document=&view.getDocument();
- data.viewChoices=view.getChoices();
- fade();
- return 1;
- }
-
- //*************************************************************************
-
- void PrintDialog::fade()
- {
- bool fade=isAll.isSelected();
- from.fade(fade);
- to.fade(fade);
-
- fade=!isDoubleSided.isOn();
-
- isSide2.fade(fade);
-
- isStartEnd.fade(fade);
- bool startfade=(fade || !isStartEnd.isOn());
- startLabel.fade(startfade);
- start.fade(startfade);
- endLabel.fade(startfade);
- end.fade(startfade);
- pageLabel.fade(startfade);
-
- isPamphlet.fade(fade);
- if (!fade) fade=!isPamphlet.isOn();
- isSectionSize.fade(fade);
- if (!fade) fade=!isSectionSize.isOn();
- sectionSizeLabel.fade(fade);
- sectionSize.fade(fade);
- sheetsLabel.fade(fade);
- }
-
- //*************************************************************************
-
- Claim PrintDialog::cancel(GuiToolboxEvent&,const GuiIdBlock&)
- {
- showValues();
- return CLAIM;
- }
-
- //*************************************************************************
-
- Claim PrintDialog::set(GuiToolboxEvent&,const GuiIdBlock&)
- {
- storeValues();
- return CLAIM;
- }
-
- //*************************************************************************
-
- Claim PrintDialog::print(GuiToolboxEvent&,const GuiIdBlock&)
- {
- storeValues();
- mainWin.hide();
- nullTarget(this,PrintDialog::printWait); //wait for window to dissappear
- return CLAIM;
- }
-
- //*************************************************************************
-
- void PrintDialog::printWait()
- {
- nullTarget.destroy();
- printSetup.getFlags(data.flags);
- Printer_print(data);
- }
-
- //*************************************************************************
-
- void PrintDialog::storeValues()
- {
- data.copies = copies.getValue();
- data.flags = (isAll.isSelected() ? PrintData::IS_ALL : 0) |
- (isDoubleSided.isOn() ? PrintData::IS_DOUBLE_SIDED : 0) |
- (isSide2.isOn() ? PrintData::IS_SIDE2 : 0) |
- (isStartEnd.isOn() ? PrintData::IS_START_END : 0) |
- (isPamphlet.isOn() ? PrintData::IS_PAMPHLET : 0) |
- (isSectionSize.isOn() ? PrintData::IS_SECTION_SIZE : 0);
- data.from = from.getNumber();
- data.to = to.getNumber();
- data.start = start.getNumber();
- data.end = end.getNumber();
- data.sectionSize = sectionSize.getNumber();
- }
-
- //*************************************************************************
-
- void PrintDialog::showValues()
- {
- copies.setValue(data.copies);
- if (data.flags & PrintData::IS_ALL) isAll.select(); else isFrom.select();
- isDoubleSided.set(data.flags & PrintData::IS_DOUBLE_SIDED);
- isSide2.set(data.flags & PrintData::IS_SIDE2);
- isStartEnd.set(data.flags & PrintData::IS_START_END);
- isPamphlet.set(data.flags & PrintData::IS_PAMPHLET);
- isSectionSize.set(data.flags & PrintData::IS_SECTION_SIZE);
- from.setNumber(data.from);
- to.setNumber(data.to);
- start.setNumber(data.start);
- end.setNumber(data.end);
- sectionSize.setNumber(data.sectionSize);
- fade();
- }
-
- //*************************************************************************
-
-
- Claim PrintDialog::fadeDialog(GuiToolboxEvent&,const GuiIdBlock&)
- {
- fade();
- return CLAIM;
- }
-
- //*************************************************************************
- //*************************************************************************
- //*************************************************************************
-
- bool PrintDialog_open(DocView& view, GuiWindow& ancestor, int page)
- {
- static PrintDialog p;
- return p.open(view,ancestor,page);
- }
-
-